package common.util;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;

/**
 * JSON生成和解析工具类
 * 
 * @author MRZC
 * 
 */
public class JsonUtil {

    private JsonUtil() {
    }

    /**
     * 根据对象生成JSON字符串
     * 
     * @param object对象
     * @return JSON字符串
     */
    public static String getJson(Object cObj) {
        return JSON.toJSONString(cObj);
    }

    /**
     * 解析JSON字符串获取实体
     * 
     * @param jsonString字符串
     * @param cls实体类型
     * @return实体实例
     */
    public static <T> T getEntity(String cJson, Class<T> cCls) {
        return JSON.parseObject(cJson, cCls);
    }

    /**
     * 解析JSON获取Object
     * 
     * @param cJson字符串
     * @return键值对集合实例
     */
    public static <T> T getObject(String cJson, JsonType<T> cType) {
        return JSON.parseObject(cJson, cType);
    }

    /**
     * 解析JSON获取实体集合
     * 
     * @param cJson字符串
     * @param cCls实体类型
     * @return集合实例
     */
    public static <T> List<T> getList(String cJson, Class<T> cCls) {
        return JSON.parseArray(cJson, cCls);
    }

    /**
     * 解析JSON获取键值对
     * 
     * @param cJson字符串
     * @return键值对实例
     */
    public static Map<String, Object> getMapObject(String cJson) {
        return getMap(cJson, String.class, Object.class);
    }

    /**
     * 解析JSON获取键值对集合
     * 
     * @param cJson字符串
     * @return键值对集合实例
     */
    public static List<Map<String, Object>> getListMapObject(String cJson) {
        return getListMap(cJson, String.class, Object.class);
    }

    /**
     * 解析JSON获取键值对
     * 
     * @param cJson字符串
     * @return键值对实例
     */
    public static Map<String, String> getMapStr(String cJson) {
        return getMap(cJson, String.class, String.class);
    }

    /**
     * 解析JSON获取键值对集合
     * 
     * @param cJson字符串
     * @return键值对集合实例
     */
    public static List<Map<String, String>> getListMapStr(String cJson) {
        return getListMap(cJson, String.class, String.class);
    }

    /**
     * 解析JSON获取键值对
     * 
     * @param cJson字符串
     * @return键值对实例
     */
    public static <K, V> Map<K, V> getMap(String cJson, Class<K> cK, Class<V> cV) {
        return JSON.parseObject(cJson, new JsonType<Map<K, V>>());
    }

    /**
     * 解析JSON获取键值对集合
     * 
     * @param cJson字符串
     * @return键值对集合实例
     */
    public static <K, V> List<Map<K, V>> getListMap(String cJson, Class<K> cK, Class<V> cV) {
        return JSON.parseObject(cJson, new JsonType<List<Map<K, V>>>());
    }
}
